const { monitor, getConfig } = require('../src/services/monitor');
const schedule = require('node-schedule');
require('dotenv').config();

// 判断是否是生产环境
const isProd = process.env.NODE_ENV === 'production';

// 判断是否是测试模式
const isTestMode = process.argv.includes('test');

if (!isProd && !isTestMode) {
    console.log('当前是开发环境，不启动监控服务');
    process.exit(0);
}

/**
 * 运行监控任务
 */
async function runMonitorTasks() {
    const config = getConfig();
    if (!config) {
        console.error('无法读取配置文件，请检查配置');
        return;
    }

    for (const symbol of config.symbols) {
        for (const interval of config.intervals) {
            try {
                // 测试模式下传入额外的forceCheck参数
                await monitor(symbol, interval, isTestMode);
            } catch (error) {
                console.error(`监控任务执行失败: ${symbol} ${interval}`, error);
            }
        }
    }
}

// 立即运行一次
if (isTestMode) {
    console.log('执行监控服务测试...');
    console.log('首次运行监控任务...');
    runMonitorTasks();
} else if (process.env.NODE_ENV !== 'development') {
    console.log('首次运行监控任务...');
    runMonitorTasks();
}

// 只有非测试模式才设置定时任务
if (!isTestMode) {
    // 获取配置
    const config = getConfig();
    if (config) {
        // 使用每分钟执行一次的cron表达式
        const cronExpression = "* * * * *";
        schedule.scheduleJob(cronExpression, runMonitorTasks);
        
        console.log('K线监控服务已启动...');
        console.log('正在监控以下配置:');
        console.log('交易对:', config.symbols.join(', '));
        console.log('时间周期:', config.intervals.join(', '));
        console.log('连续K线数量:', config.consecutiveCount);
        console.log('检查间隔: 每分钟');
        
        // 显示各时间周期的检查时间点
        if (config.checkPoints) {
            console.log('检查时间点:');
            Object.entries(config.checkPoints).forEach(([interval, points]) => {
                console.log(`  ${interval}: 每小时的第 ${points.join(', ')} 分钟`);
            });
        }
        
        console.log('注意: 10分钟K线由5分钟K线合成');
    }
}

// 测试模式下执行完任务后退出
if (isTestMode) {
    setTimeout(() => {
        console.log('测试任务执行完成，退出');
        process.exit(0);
    }, 10000); // 10秒后退出，确保异步任务完成
} else {
    // 优雅退出
    process.on('SIGINT', () => {
        console.log('正在关闭监控服务...');
        schedule.gracefulShutdown()
            .then(() => process.exit(0));
    });
} 